package com.smileus.integration.provider.impl;

import org.apache.log4j.Logger;

import com.smileus.entity.ServiceRouter;
import com.smileus.integration.provider.AbstractServiceProvider;
import com.smileus.integration.provider.ServiceProvider;
import com.smileus.service.IntegrationLogsService;

/**
 * FileName：CxfServiceProvider.java Date：2010-12-6 User: heng.dong
 */
// hessian服务加载配置，通过web.xml中配置
// <servlet>
// <servlet-name>hello</servlet-name>
// <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
// <init-param>
// <param-name>home-class</param-name>
// <param-value>com.smileus.integration.provider.impl.HessianServiceProvider</param-value>
// </init-param>
// <init-param>
// <param-name>home-api</param-name>
// <param-value>com.smileus.integration.provider.ServiceProvider</param-value>
// </init-param>
// </servlet>
// <servlet-mapping>
// <servlet-name>service</servlet-name>
// <url-pattern>/service</url-pattern>
// </servlet-mapping>
public class HessianServiceProvider extends AbstractServiceProvider implements ServiceProvider {
	private static final Logger logger = Logger.getLogger(HessianServiceProvider.class);

	/**
	 * 发布Webservice服务，如果发布失败，返回false init
	 * 
	 * @param CxfServiceProvider
	 * @return boolean
	 */
	public void start() {
		// 1. 每个子系统有自己的ServiceProvider,且只需一个；
		// 2. 发布当前机器的服务
		// 3. 告诉监控系统，当前机器服务已处于服务中状态
		try {
			ServiceRouter serviceRouter = clusterService.getCurtServiceRouter();// 取到的总是最新状态的serviceRouter
			/**
			 * hessian的服务加载，通过servlet启动
			 */
			IntegrationLogsService.startLogJob();// 启动日志记录任务
			isRunning = true;
			// 先刷新集群环境
			clusterRefresh();
			serviceRouter.setServiceStatus(1);// 启动状态
			clusterService.saveOrUpdateServiceRouter(serviceRouter);
			logger.debug("当前机器" + serviceRouter.getServiceHost() + ":" + serviceRouter.getComDomain() + "." + serviceRouter.getSysDomain() + "服务已启动");

		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * tasks格式：[{"sId:userService.add,ps:[param1,param2]",seq:123}
	 * 
	 * @param ServiceProvider
	 * @return String
	 */
	public String doBatch(String tasks) {
		return super.doBatch(tasks);
	}

	/**
	 * 要保证入参为JSON字符串，如果没有参数，用"" 当前服务器对外提供的服务统一入口 ；
	 * 
	 * serviceId形式如：userService.add，userService为当前机器上spring bean
	 * id，add为当前bean的方法；
	 * 
	 * param：调用接口入参，建议每一个具体服务的入参均为JSONObject，这样可简化具体服务调用
	 */

	public String doService(String serviceId, String param) {
		return super.doService(serviceId, param);
	}

}
